<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="URwlr" id="URwlr"><span data-lake-id="ud8932fb6" id="ud8932fb6">典型回答</span></h1>
  <p data-lake-id="ua04c0867" id="ua04c0867"><br></p>
  <p data-lake-id="u16c3ce9e" id="u16c3ce9e"><span data-lake-id="udf29d7df" id="udf29d7df">可以，动态SQL是指根据不同的条件生成不同的SQL语句，可以避免在编写SQL语句时出现重复的代码，提高代码的复用性和灵活性。</span></p>
  <p data-lake-id="ube626b09" id="ube626b09"><span data-lake-id="u7f2f7992" id="u7f2f7992">​</span><br></p>
  <p data-lake-id="ue0b6ee9b" id="ue0b6ee9b"><span data-lake-id="uff963ec6" id="uff963ec6">MyBatis中提供了一些标签来支持动态SQL的生成，常见的几个有：</span></p>
  <p data-lake-id="u6ccc9e3e" id="u6ccc9e3e"><span data-lake-id="u292db19c" id="u292db19c">​</span><br></p>
  <ol list="u1acfcfc0" data-lake-index-type="true">
   <li fid="uadf157e1" data-lake-id="u54f27602" id="u54f27602"><strong><span data-lake-id="u6648c479" id="u6648c479">if标签</span></strong><span data-lake-id="u61f5f80b" id="u61f5f80b">：用于根据条件生成SQL语句的一部分。例如：</span></li>
  </ol>
  <p data-lake-id="u2de4abb4" id="u2de4abb4"><span data-lake-id="ud74d9848" id="ud74d9848" class="lake-fontsize-12" style="color: rgb(55, 65, 81); background-color: rgb(247, 247, 248)">​</span><br></p>
  <pre lang="java"><code>
&lt;select id="getUsers" resultType="User"&gt;
  SELECT * FROM user
  WHERE
    &lt;if test="name != null and name != ''"&gt;
      name like #{name}
    &lt;/if&gt;
    &lt;if test="age != null"&gt;
      and age = #{age}
    &lt;/if&gt;
&lt;/select&gt;

</code></pre>
  <p data-lake-id="ubdf68388" id="ubdf68388"><br></p>
  <p data-lake-id="u77cb3a5f" id="u77cb3a5f"><span data-lake-id="uea6455b8" id="uea6455b8">使用if标签判断了查询条件中的name和age是否为空，如果不为空，则在SQL语句中加入相应的条件。</span></p>
  <p data-lake-id="ubc554a0b" id="ubc554a0b"><span data-lake-id="u5453a74f" id="u5453a74f">​</span><br></p>
  <ol list="u1acfcfc0" start="2" data-lake-index-type="true">
   <li fid="uadf157e1" data-lake-id="u0b7197c4" id="u0b7197c4"><strong><span data-lake-id="uafd575c3" id="uafd575c3">choose、when、otherwise标签</span></strong><span data-lake-id="u9a58e76a" id="u9a58e76a">：用于根据不同的条件选择不同的SQL语句块。例如：</span></li>
  </ol>
  <pre lang="java"><code>
&lt;select id="getUsers" resultType="User"&gt;
  SELECT * FROM user
  &lt;where&gt;
    &lt;choose&gt;
      &lt;when test="name != null and name != ''"&gt;
        and name like #{name}
      &lt;/when&gt;
      &lt;when test="age != null"&gt;
        and age = #{age}
      &lt;/when&gt;
      &lt;otherwise&gt;
        and sex = 'M'
      &lt;/otherwise&gt;
    &lt;/choose&gt;
  &lt;/where&gt;
&lt;/select&gt;

</code></pre>
  <p data-lake-id="u6dee06f4" id="u6dee06f4"><br></p>
  <p data-lake-id="u29b0543f" id="u29b0543f"><span data-lake-id="u17e18950" id="u17e18950">使用choose、when、otherwise标签判断了查询条件中的name和age是否为空，如果不为空，则在SQL语句中加入相应的条件；否则加入默认的条件。</span></p>
  <p data-lake-id="u08480d72" id="u08480d72"><span data-lake-id="u0a875dfd" id="u0a875dfd">​</span><br></p>
  <ol list="u1acfcfc0" start="3" data-lake-index-type="true">
   <li fid="uadf157e1" data-lake-id="uea3e0019" id="uea3e0019"><strong><span data-lake-id="u7d62cd7f" id="u7d62cd7f">foreach标签</span></strong><span data-lake-id="u547bb6fd" id="u547bb6fd">：用于遍历集合并生成多个SQL语句块。例如：</span></li>
  </ol>
  <pre lang="java"><code>
&lt;update id="getUsers" parameterType="List"&gt;
 SELECT * FROM user
  where id in
    &lt;foreach collection="list" item="user" open="(" separator="," close=")"&gt;
      #{user.id}
    &lt;/foreach&gt;
&lt;/update&gt;

</code></pre>
  <p data-lake-id="ucf5131dd" id="ucf5131dd"><br></p>
  <p data-lake-id="ud9168e33" id="ud9168e33"><span data-lake-id="u69d48a78" id="u69d48a78">使用foreach标签遍历了一个User集合，并根据集合中的元素生成了多个SQL语句块，用于批量更新数据库中的数据。</span></p>
  <p data-lake-id="u157a9158" id="u157a9158"><span data-lake-id="u699a3d4a" id="u699a3d4a">​</span><br></p>
  <p data-lake-id="uff1f603e" id="uff1f603e"><span data-lake-id="u4056f963" id="u4056f963">除了以上示例中提到的标签外，MyBatis还提供了很多其他的标签来支持动态SQL的生成，可以根据实际需求进行选择和使用。</span></p>
 </body>
</html>